package org.jaaksi.kottlindemo.hilt

import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ActivityComponent
import javax.inject.Qualifier

// @Qualifier定义注解，用于区分同一接口的不同实例
@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class BindGasEngine

@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class BindElectricEngine


/**
 * 用于提供Engine接口所需要的实例
 * @InstallIn 声明组件类型，内置了7种
 * 意思是把这个Module安装到Activity组件当中，所以可以在Activity 中是使用由这个模块提供的所有依赖注入实例
 * 另外，Activity 中包含的 Fragment 和 View 也可以使用，但是除了 Activity、Fragment、View 之外的其他地方就无法使用了
 *
 */
@Module
@InstallIn(ActivityComponent::class)
abstract class EngineModule {

    @BindGasEngine
    @Binds
    abstract fun bindGasEngine(gasEngine: GasEngine): Engine

    @BindElectricEngine
    @Binds
    abstract fun bindElectricEngine(electricEngine: ElectricEngine): Engine

}

